package org.atlantis.evnlib;

/**
 * 事件定义类。用来定义一个事件，所有事件的eventName必须是唯一的。
 * 
 * @author <a href="mailto:seenoevil.cn@gmail.com">李曦</a><br/>
 *         Created at: 2011-7-4 上午09:50:00
 */
public final class EventDef {

	private String eventName;
	private int fixedThreadSize = 2;
	private int flexThreadSize = 3;
	private int queueSize = 32;

	/** 实例化事件定义对象，eventName指定事件名，事件名必须唯一 */
	public EventDef(String eventName) {
		this.eventName = eventName;
	}

	/** 执行该事件的固定线程数（可选，默认为2） */
	public EventDef fixedThreadSize(int fixedThreadSize) {
		this.fixedThreadSize = fixedThreadSize;
		return this;
	}

	/** 执行该事件的弹性线程数（可选，默认为3） */
	public EventDef flexThreadSize(int flexThreadSize) {
		this.flexThreadSize = flexThreadSize;
		return this;
	}

	/** 执行该事件的工作队列容量（可选，默认为32），推荐：queueSize >= fixedThreadSize */
	public EventDef queueSize(int queueSize) {
		this.queueSize = queueSize;
		return this;
	}

	String getEventName() {
		return eventName;
	}

	int getFixedThreadSize() {
		return fixedThreadSize;
	}

	int getFlexThreadSize() {
		return flexThreadSize;
	}

	int getQueueSize() {
		return queueSize;
	}

	@Override
	public String toString() {
		return String.format("EventDef<fixedThreadSize:%s, flexThreadSize:%s, queueSize:%s>", fixedThreadSize,
				flexThreadSize, queueSize);
	}
}
